Parca converts profiling into continuous observability signal. Traditionally, profiling was ad-hoc — pprof when something went wrong. Parca does it 24/7 across the cluster, via eBPF, with minimal overhead (<1% CPU). Result: you see how service CPU profile changes over time, detect performance regressions, and debugging has a new fundamental tool.
What It Offers
- Continuous CPU profiling without instrumenting apps.
- eBPF-based: no code changes required.
- Prometheus-style: push/pull, labels, time series.
- Interactive flame graphs with temporal zoom.
- Parca Agent per node on Kubernetes.
- Parca Server for storage + UI.
Installation
Kubernetes DaemonSet:
helm repo add parca https://parca-dev.github.io/helm-charts
helm install parca-agent parca/parca-agent --namespace monitoring
helm install parca parca/parca --namespace monitoring
By default, Agent profiles all processes on the node. You can filter by labels.
What You See
Interface:
- Temporal view: sample CPU over time for a service.
- Flame graph: hierarchy of CPU-consuming functions.
- Comparison: compare two periods (before/after deploy).
- Filtering: by container, pod, process, namespace.
- Iceberg view: flame graph inversion — bottom-up top consumers.
Real Use Cases
- Detect memory leaks manifesting as more work over time.
- See after a deploy if CPU rose in specific function.
- Compare performance between versions.
- Identify hot paths: where to invest optimization effort.
- Incident debugging: post-mortem with historical data.
Parca vs Pyroscope
Pyroscope (now part of Grafana):
- Mature multi-language support (Go, Python, Ruby, Node, Java, .NET).
- Native Grafana integration.
- eBPF isn’t primary focus either.
Parca:
- eBPF primary: single agent profiles everything.
- No app instrumentation: zero code changes.
- Newer: less maturity than Pyroscope in some aspects.
- Grafana integration also available.
For K8s with many languages and zero-instrumentation, Parca. For native Grafana stack with instrumented apps, Pyroscope.
Real Overhead
Benchmarks:
- Parca Agent: ~0.5-1% CPU per node.
- Storage: compressed samples, ~GB/day for 50-node cluster.
- Network: minimal — aggregated samples.
Low enough to run always, not only “when debugging”.
Storage
Parca server stores in:
- Object Storage (S3) for samples.
- Prometheus metrics for metadata.
- Internal TSDB.
For long-term storage, S3-compatible + retention policy.
Language Support
eBPF-based profiling works language-agnostically, but:
- Stack unwinding: better in Go, C/C++, Rust with debug info.
- Java/.NET: requires specific stack walker (Parca has experimental support).
- Python/Node: interpreted — Parca sees interpreter frames, not Python-level details. Complement with language-specific profiler.
For full interpreted-app observability, Pyroscope tends to be better.
Grafana Integration
Parca exposes queryable data. Grafana can show:
- Per-service CPU time series.
- Embedded flame graphs.
- Alerts when CPU spikes on specific function.
Unified observability stack: metrics (Prometheus) + logs (Loki) + traces (Tempo) + profiles (Parca).
Cases Where Overkill
- Simple single-node apps with htop/perf enough.
- Without K8s cluster (Parca is cluster-oriented).
- Without capacity to interpret flame graphs (requires skill).
- Without incident patterns where profiling is value.
Interpreting Flame Graphs
Key skill:
- Width = time: wider = more CPU.
- Height = call depth: deeper = more nested.
- Colors: less relevant (random for differentiation).
- Hot paths: look at widest top-level.
- Comparison: diff between two periods highlights differences.
For teams without experience, Brendan Gregg’s tutorial is reference.
Security
Parca Agent requires:
- Privileged container (eBPF access).
- HostPID to see host processes.
- HostNetwork for certain scenarios.
Significant attack surface. Scope permissions narrowly and auditing recommended.
Continuous Profiling as Culture
Beyond tool, it’s cultural shift:
- Perf regressions detected early (not until prod incident).
- Optimization decisions based on data.
- New hires can explore codebase via flame graphs.
- More precise capacity planning.
Teams adopting continuous profiling report meaningful reduction in performance-related incidents.
Limitations
- Kernel complexity: eBPF differs between kernel versions. Less portable than hoped.
- Stack unwinding not always perfect.
- Interpreting requires skill and time.
- Storage can grow large on large clusters.
Commercial Alternatives
- Datadog Continuous Profiler: mature, multi-language, paid.
- New Relic CodeStream.
- Pyroscope Cloud (now Grafana).
- Sentry Profiling.
For startups, open-source Pyroscope/Parca covers. Enterprises with budget tend to use commercial for support.
Conclusion
Parca is a serious tool for continuous profiling on Kubernetes. Its eBPF approach removes instrumentation friction. For compiled apps (Go, Rust, C), near-perfect. For interpreted apps, complement with language-specific profilers. In modern observability stack, continuous profiling is the fourth dimension (after metrics/logs/traces). Adopting Parca costs little and gives visibility hard to obtain otherwise. For performance-serious teams, it’s worth it.
Follow us on jacar.es for more on observability, eBPF, and performance engineering.